Listin Gambas2

Création d'un programme en Gambas2 : un répertoire téléphonique pas à pas

Origine : http://listingambas.blogspot.com/2011/06/anexo-5-optimizando-nuestro-codigo.html



Annexe 5: Optimisation de notre code.

Une fois le programme terminé, on voit que nous pouvons l'organiser et réduire le code répétitif en utilisant les appels de procédure.
Nous avons,
par exemple, ce code qui est répété plusieurs fois :


'Mettre à vide la propriété .Text des textbox
PictureBoxphoto.Picture = Picture["icon:/96/gambas"]
TextBoxDNI .text  = ""
TextBoxnom .text  = ""
TextBoxprenoms
.text  = ""
TextBoxEntreprise
.text  = ""
TextBoxPoste
.text  = ""
TextBoxTelEntreprise
.text  = ""
TextBoxTelPerso
.text  = ""
TextBoxFax
.text  = ""
TextBoxMobilEntreprise
.text  = ""
TextBoxMobilPerso
.text  = ""
TextBoxWEB
.text  = ""
PictureBoxphoto.Picture = ""
TextBoxAdresse
.text  = ""
TextBoxComments
.text  = ""
TextBoxDate
.text  = ""
TextBoxmail
.text  = ""
' écriture des données saisies dans la grille

  titre.remplir()
' setfocus mis en tête des données
  TextBoxDNI.SetFocus




Pour ce code qui est répété un grand nombre de fois, nous pouvons créer une subroutine que nous appelerons quand nous en aurons besoin.
'---------------------------------------------------------------
'Code regroupant ce qui est répété 
'---------------------------------------------------------------
PUBLIC SUB nettoie ()
'Mettre à vide la propriété .Text des textbox
PictureBoxphoto.Picture = Picture["icon:/96/gambas"]
TextBoxDNI .text  = ""
TextBoxnom .text  = ""
TextBoxprenoms
.text  = ""
TextBoxEntreprise
.text  = ""
TextBoxPoste
.text  = ""
TextBoxTelEntreprise
.text  = ""
TextBoxTelPerso
.text  = ""
TextBoxFax
.text  = ""
TextBoxMobilEntreprise
.text  = ""
TextBoxMobilPerso
.text  = ""
TextBoxWEB
.text  = ""
PictureBoxphoto.Picture = ""
TextBoxAdresse
.text  = ""
TextBoxComments
.text  = ""
TextBoxDate
.text  = ""
TextBoxmail
.text  = ""
' écriture des données saisies dans la grille

  titre.remplir()
' setfocus mis en tête des données
  TextBoxDNI.SetFocus


 Une autre amélioration consiste à mettre des icônes aux menus :

Par l'éditeur de menus, nous pouvons mettre quelques icônes pour distinguer  les options des menus, c'est facile et ça présente bien :
editeur de menu
menu 1

Menu 2



 Une autre amélioration consiterait à mettre une étiquette qui afficherait le fichier ".lis" sur lequel nous travaillons actuellement.
Dans le formulaire Fmain, créons un LabelText appelé labelActual et dans l'IDE de Gambas, nous mettons la valeur raised à la propriété "Border", pour qu'elle se voit mieux visible (c'est un cadre en relief sur la zone d'étiquette)

Chaque fois que vous ouvrez, enregistrez, ou générez la «Liste générale» le nom du fichier y sera affiché :
Par exemple : Module Fichier.Sauve.
 ... .........
 lignes = & var. Date_donnees [a] & codefinligne
 lignes = & var. email [a] & codefinligne
 NEXT
 var. changement = "NON"
 File . Save (destination, lignes)
 Fmain. LabelActual . text = destination
fins: «Nous avons appuyé sur le bouton Annuler dans la boîte de dialogue Dialog.SaveFile ()
' Fin de la sous-routine
 END
Dans le module  fichier. ouvrir :
.... ........
 b + = 1
 var. mail [a] = arr_chaine [b]
NEXT

 var. change = "NON"
 titre. remplir ()
 FMain. LabelActual . text = Dialog. Chemin
 ENDIF
 finlecture:
 END
Et le module importer.complet :
 ... .............
 lignes = & var. mail [a] & codefinligne
 NEXT
 File . save (destination,  lignes)
 var. change = "NON"
 FMain. LabelActual . text = destination
 'Fin du processus
 END



Nous voudrions à peu près ceci :

etiquette Actual








Annexe 6: derniers ajouts

Dans cette annexe, nous allons ajouter un nouveau module qui sera appelé ajoutrecents , et qui se chargera de se «souvenir» des dossiers précédemment ouverts. 
Ajoutons d'abord ce menu au formulaire Fmain via l'éditeur de  menu :

Menu

Et nous allons y mettre

ajout récent


Pour le nom de recent1 , recent 2,  recent3 ou recent4 mettre dans le titre "(vide)."
De cette façon, nous disposons de 5 emplacements pour stocker les chemins des 5 derniers fichiers ouverts.


Dans le formulaire Fmain , ajoutez dans Form_Open ():
PUBLIC SUB Form_Open ()
ME.CENTER ()
var. reinit ()
titre. definir ()
var chemin_photo = "icône: / 96/gambas"
AjoutRecents. add ()
END

et pour que chaque fois que nous cliquons sur un menu de ces derniers on aille ouvrir le fichier :
'---------------------------------
' Ouverture d'un fichier récent
'---------------------------------
PUBLIC SUB recent0_Click ()
fichier. ouvrir (FMain. recent0 . caption )
END
PUBLIC SUB recent1_Click ()
fichier. ouvrir (FMain. recent1 . caption )
END
PUBLIC SUB recent2_Click ()
fichier. ouvrir (FMain. recent2 . caption )
END
PUBLIC SUB recent3_Click ()
fichier. ouvrir (FMain. recent3 . caption )
END
PUBLIC SUB recent4_Click ()
fichier. ouvrir (FMain. recent4 . caption )
END


et Form_Close ()
PUBLIC SUB Form_Close ()
DIM res AS Integer
IF var. change = "oui" THEN
res = message. Question ( "Voulez-vous quitter sans sauvegarder?" , "non", "oui" )
IF Res = 2 THEN
AjoutRecent.Sauve
()
ME . CLOSE
ELSE
STOP EVENT 'arrêt de la gestion d'évènement et sortie du programme
ENDIF
ELSE
ME . CLOSE
ENDIF
'On ne quitte pas le programme
FIN

Dans le module
de fichier , à la routine open () nous ajoutons au début :
PUBLIC SUB ouvrir ( OPTION chemin AS STRING )
DIM a AS Integer 'compteur de  groupe de données 
DIM b AS Integer  'compteur de données
DIM arr_chaines AS STRING [ ]
DIM codefinligne AS STRING
DIM numero_de_donnee AS Integer
codefinligne = "|"
IF chemin = "" THEN
Dialog. Titre = "Sélectionner un fichier de données Listin"
Dialog. Filtre = [ "*. lis" , "Données Listin" ]
IF NOT Dialog. OpenFile () THEN
racine = Dialog.Path
ELSE
STOP EVENT
ENDIF
ENDIF


arr_chaines = Split (File.Load(racine), codefinligne)


IF arr_chaines [ 0 ] <> "v0.0.1" THEN
'version incompatible avec la version de ce programme, abandon de la procédure
... ...


et à la fin du module nous ajoutons
... ...
var. mail [a] = arr_chaines [b]
NEXT
var. change = "NON"
titre. remplir ()
FMain. LabelActual . text = racine
ajoutrecents. add.racine
finlecture:
END


Maintenant, nous définissons le nouveau module ajoutrecents:
PUBLIC SUB ajouter ( chemin AS string ) AS string
IF FMain. recent0 . caption = "(pas de récent)" THEN
FMain. recent0 . caption = chemin
RETURN
ENDIF
'Ne continue pas si l'élément est répété
IFFMain. recent0 . caption = chemin THEN
RETURN
ENDIF
IFFMain. recent1. caption = cheminTHEN
RETURN
ENDIF
IFFMain. recent2. caption = cheminTHEN
RETURN
ENDIF
IFFMain. recent3. caption = cheminTHEN
RETURN
ENDIF
IFFMain. recent4. caption = cheminTHEN
RETURN
ENDIF
IFFMain. recent1 . caption = "(vide)" THEN
FMain. recent1 . caption = chemin
FMain. recent1 . Visible = TRUE
RETURN
ENDIF
IF FMain. recent2 . caption = "(vide)" ALORS
FMain.recent2 . caption = chemin
FMain. recent2 . Visible = TRUE
RETURN
ENDIF
IF FMain. recent3 . caption = "(vide)" ALORS
FMain. recent3 . caption = chemin
FMain. recent3 . Visible = TRUE
RETURN
ENDIF
IF FMain. recent4 . caption = "(vide)" ALORS
FMain. recent4 . caption = chemin
FMain. recent4 . Visible = TRUE
RETURN
ENDIF
'Si on parvient jusqu'ici, ça signifie que nous avons remplies les 5 dernières 
'Il nous faut donc décaler toutes les dernières légendes et ajouter la nouvelle
FMain. recent0 . caption = FMain. recent1 . caption
FMain. recent1 . caption = FMain. recent2 . caption
FMain. recent2 . caption = FMain. recent3 . caption
FMain. recent3 . caption = FMain. recent4 . caption
FMain. recent4 . caption = chemin
END


PUBLIC SUB Sauve ()
DIM lignes AS string
DIM chemin AS string
lignes = "************** *** Contenu Doc recents  " & "\ n"
lignes & = "documentsrecents" & "\ n"
lignes & = "v.0.0.1" & "\ n"
lignes = & FMain. recent0 . caption & "\ n"
lignes = & FMain. recent1 . caption & "\ n"
lignes = & FMain. recent3 . caption & "\ n"
lignes = & FMain. recent3 . caption & "\ n"
lignes = & FMain. recent4 . caption & "\ n"
lignes = & Fin "************* ************" & "\ n"
chemin = user.home
Fichier . Enregistrer ( chemin & "/ documentsRecentslistin.DocRec" , lignes )
FIN


PUBLIC SUB ouverte ()
DIM arr_chaines AS cordes []
FMain. recent1. Visible = FALSE
FMain. recent2 . Visible = FALSE
FMain. recent3 . Visible = FALSE
FMain. recent4 . Visible = FALSE
IF Exist (user.home & "/ documentsrecentslistin.DocRec" ) = FALSE THEN
'Il n'ya pas de fichier,  nous pouvons continuer à sauver sous le même nom
ENDIF
TRY arr_chaines = Split( file . LOAD ( user.home & "/ documentsrecentslistin.DocRec" ) , "\ n" )
IF ERROR THEN
Message. Error ( "Erreur de lecture" )
RETURN
ENDIF
'Si une erreur est retournée au programme,on ne peut pas trouver le fichier documentsrecents.DocRec
FMain. recent0. caption = arr_chaines [ 3 ]
FMain. recent1. caption = arr_chaines [ 4 ]
FMain. recent2. caption = arr_chaines [ 5 ]
FMain. recent3. caption = arr_chaines [ 6 ]
FMain. recent4. caption = arr_chaines [ 7 ]
IF FMain. reciente1 . caption <> "(vide)" THEN
FMain. recent1 . Visible = TRUE
ENDIF
IF FMain. recent2. caption <> "(vide)" THEN
FMain. recent2. Visible = TRUE
ENDIF
IF FMain. recent3. caption <> "(vide)" THEN
FMain. recent3. Visible = TRUE
ENDIF
IF FMain. recent4. caption <> "(vide)" THEN
FMain. recent4. Visible = TRUE
ENDIF
END